<?php
/**
 * Created by JetBrains PhpStorm.
 * User: Serenity
 * Date: 21-6-11
 * Time: 9:18
 * To change this template use File | Settings | File Templates.
 */
require_once(Config::acquire('Controller', null, 'controller'));
require_once(Config::acquire("Hardware", MODEL));
require_once(Config::acquire("Leverancier", MODEL));
require_once(Config::acquire("Licentie", MODEL));
require_once(Config::acquire("GeinstaleerdeSoftware", MODEL));

class HardwareController extends Controller
{

    /**
     * Index:
     * Hier wordt in het kort info gegeven.
     * @return void
     */
    public function index()
    {
        $this->view->render('Hardware.tpl');
    }

    /**
     * Overzicht:
     * Hier wordt een ovverzicht weergegeven en bij klikken op ID ga je naar detail
     * @return void
     */
    public function overzicht()
    {
        $list = array();

        foreach (Hardware::readAll() as $hardware)
            $list[] = $hardware->toArray();
        $this->view->assign('detail_link', SDS::getURL('Hardware', 'detail'));
        $this->view->assign('leverancier_link', SDS::getURL('Leverancier', 'detail'));
        $this->view->assign("hardware", $list);
        $this->view->render('Hardware_list.tpl');
    }

 /**
     * Detail:
     * Gedetaileerde omschrijving van een employee.
     * Bij klikken op wijzigen of verwijderen ga je naar betreffende onderdeel toe.
     * verder zitten hardware en software er nog bij
     * @return void
     */

    public function detail()
    {
        $softwarelijst = array();
        $params = UrlDecoder::get_Params();
        if (is_null($params[0]))
            SDS::redirect('Hardware', "overzicht");
        $id = $params[0];
        $this->software($id);

        foreach (Hardware::read($id)->toArray() as $key => $value) {
            $this->view->assign($key, $value);
        }
        $this->view->assign('leverancier_link', SDS::getURL('Leverancier', 'detail'), array($id));
        $this->view->assign('locatie_link', SDS::getURL('Locatie', 'detail'), array($id));
        $this->view->assign('wijzig_url', SDS::getURL('Hardware', 'bewerken', array($id)));
        $this->view->assign('verwijder_url', SDS::getURL('Hardware', 'delete', array($id)));


        foreach (GeinstaleerdeSoftware::read($id)->getSoftware() as $software)
            $softwarelijst[] = $software->toArray();
        $this->view->assign("softwarelijst", $softwarelijst);
        $this->view->assign('software_detail_link', SDS::getURL("Software", "detail"));
        $this->view->assign('software_verwijder_link', SDS::getURL("hardware", "detail", array($id, 'delete')));
        $this->view->assign('software_toevoegen_link', SDS::getURL("hardware", "detail", array($id, 'add')));
        $this->view->assign('software_overzicht', SDS::getURL('hardware', 'detail', array($id)));

        $this->view->render('Hardware_Detail.tpl');
    }

    /**
     * Bewerken:
     * het terughalen van de oude opties en de mogelijkheid om deze te veranderen.
     * wordt direct doorgestuurd naar het formulier.
     *
     * @return void
     */

    public function bewerken()
    {
        $leverancierIDs = array();
        $locatieIDs = array();
        $params = UrlDecoder::get_Params();
        if (!isset($params[0]))
            SDS::redirect("Hardware", "overzicht");
        $id = $params[0];
        foreach (Hardware::read($id)->toArray() as $key => $value) {
            $this->view->assign($key, $value);
        }
        foreach (Leverancier::readAll() as $leverancier) {
            $leverancierIDs[$leverancier->getID()] = $leverancier->getNaam();
        }
        foreach (Locatie::readAll() as $locatie) {
            $locatieIDs[$locatie->getID()] = $locatie->getNaam();
        }

        $this->view->assign('locaties', $locatieIDs);
        $this->view->assign('leveranciers', $leverancierIDs);
        $this->view->assign('form_URL', SDS::getURL('Hardware', 'update', array($id)));
        $this->view->assign('HardwareTitle', "Hardware wijzigen");
        $this->view->render("Hardware_Change.tpl");
    }

    /**
     * Toevoegen:
     * Gegevens  worden klaargezet om in een formulier te worden gezet
     * @return void
     */

    public function toevoegen()
    {
        $leverancierIDs = array();
        $locatieIDs = array();
        foreach (Leverancier::readAll() as $leverancier) {
            $leverancierIDs[$leverancier->getID()] = $leverancier->getNaam();
        }
        foreach (Locatie::readAll() as $locatie) {
            $locatieIDs[$locatie->getID()] = $locatie->getNaam();
        }

        $this->view->assign('locaties', $locatieIDs);
        $this->view->assign('leveranciers', $leverancierIDs);
        $this->view->assign('form_URL', SDS::getURL('Hardware', 'add', null));
        $this->view->render("Hardware_Change.tpl");
    }


     /**
 * Add:
 * Hier wordt het invul formulier aangeroepen om een dienst toe te voegen
 * @return void
 */
    public function add()
    {
        require_once(Config::acquire('FormValidation', APPLICATION));
        FormValidation::stripInput();
        Hardware::create(null,
                         $_POST['Naam'],
                         $_POST['Omschrijving'],
                         Locatie::read($_POST['Locatie']),
                         $_POST['Serienummer'],
                         $_POST['Merk'],
                         $_POST['Type'],
                         Leverancier::read($_POST['Leverancier']),
                         $_POST['Aanschafjaar'])->update();
        SDS::redirect("Hardware", "overzicht");
    }

 /**
 * Delete:
 * Hier wordt een bestaand gegeven gedeleted op moment dat de functie wordt aangeroepen
 * @return void
 *
 */

    public function delete()
    {
        $id = UrlDecoder::get_Params();
        if (isset($id[0])) {
            Hardware::read($id[0])->delete();
            SDS::redirect("Hardware", "overzicht", null);
        }
    }


/**
     * Update:
     * Geeft de gegevens door aan de database en zet deze er in.
     * @return void
     */


    public function update()
    {
        require_once(Config::acquire('FormValidation', APPLICATION));
        FormValidation::stripInput();
        $params = UrlDecoder::get_Params();
        if (isset($params[0])) {
            $hardware = Hardware::read($params[0]);
            $hardware->setNaam($_POST['Naam']);
            $hardware->setOmschrijving($_POST['Omschrijving']);
            $hardware->setLocatie(Locatie::read($_POST['Locatie']));
            $hardware->setSerienummer($_POST['Serienummer']);
            $hardware->setMerk($_POST['Merk']);
            $hardware->setType($_POST['Type']);
            $hardware->setLeverancier(Leverancier::read($_POST['Leverancier']));
            $hardware->setAanschafjaar($_POST['Aanschafjaar']);
            $hardware->update();
            SDS::redirect("Hardware", "detail", $params[0]);


        } else {
            SDS::redirect("Hardware", "overzicht", null);
        }
    }

/**
 * Hier wordt bij aanroepen van functie een nieuwe software aan de hardware gekoppeld
 * Ook is er de mogelijkheid om de software te deleten.
 * Wordt ook weergegeven onder het detail overzicht hardware.
 * @return
 */
    public function software($id)
    {
        $hid = $id;
        $params = UrlDecoder::get_Params();
        if (empty($params[1]) && empty($params[2]))
            return;


        if (isset($params[2])) {
            switch ($params[1]) {
                case 'delete':
                    GeinstaleerdeSoftware::read($hid)->delete($params[2]);
                    SDS::redirect('Hardware', "detail", array($hid));
                    break;
                case 'add':
                    require_once(Config::acquire('FormValidation', APPLICATION));
                    FormValidation::stripInput();
                    GeinstaleerdeSoftware::read($hid)->add($_POST['Software']);
                    SDS::redirect('Hardware', "detail", array($hid));
                    break;
            }

        } else {
            $this->view->assign('software', GeinstaleerdeSoftware::read($id)->getUnique());
            $this->view->assign('form_url', SDS::getURL("Hardware", 'detail', array($hid, 'add', 5)));
        }

    }
}
